<!DOCTYPE html>
<html>
<head>
    

    

    



    <meta charset="utf-8">
    
    
    
    
    <title>简单谈谈Spring的IoC以及bean的生命周期 | 博客主页 | 世界是个球，前方总有路！</title>
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    
    <meta name="theme-color" content="#3F51B5">
    
    
    <meta name="keywords" content="Spring">
    <meta name="description" content="一、前言&amp;emsp;&amp;emsp;这几天正在复习Spring的相关内容，同时想要对Spring的实现原理做一些深入的研究。今天看了看Spring中IoC的实现，找到了一篇非常详细的博客，研究了一个下午，看完之后唯一的感受就是——太复杂了。Spring源码中，类和接口的体系非常的复杂，同时方法的实现也是，方法调用感觉无穷无尽，甚至相互调用，给我绕的晕晕的。应该是自己目前的技术水平还太低，项目经验也不足">
<meta property="og:type" content="article">
<meta property="og:title" content="简单谈谈Spring的IoC以及bean的生命周期">
<meta property="og:url" content="http://tewuyiang.gitee.io/blog/%E7%AE%80%E5%8D%95%E8%B0%88%E8%B0%88Spring%E7%9A%84IOC%E5%AE%9E%E7%8E%B0/index.html">
<meta property="og:site_name" content="博客主页">
<meta property="og:description" content="一、前言&amp;emsp;&amp;emsp;这几天正在复习Spring的相关内容，同时想要对Spring的实现原理做一些深入的研究。今天看了看Spring中IoC的实现，找到了一篇非常详细的博客，研究了一个下午，看完之后唯一的感受就是——太复杂了。Spring源码中，类和接口的体系非常的复杂，同时方法的实现也是，方法调用感觉无穷无尽，甚至相互调用，给我绕的晕晕的。应该是自己目前的技术水平还太低，项目经验也不足">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="http://tewuyiang.gitee.io/blog/%E7%AE%80%E5%8D%95%E8%B0%88%E8%B0%88Spring%E7%9A%84IOC%E5%AE%9E%E7%8E%B0/1.png">
<meta property="article:published_time" content="2020-05-09T15:07:51.000Z">
<meta property="article:modified_time" content="2020-05-10T17:18:45.771Z">
<meta property="article:author" content="特务依昂">
<meta property="article:tag" content="Spring">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="http://tewuyiang.gitee.io/blog/%E7%AE%80%E5%8D%95%E8%B0%88%E8%B0%88Spring%E7%9A%84IOC%E5%AE%9E%E7%8E%B0/1.png">
    
        <link rel="alternate" type="application/atom+xml" title="博客主页" href="/blog/atom.xml">
    
    <link rel="shortcut icon" href="/blog/img/title.png">
    <link rel="stylesheet" href="//unpkg.com/hexo-theme-material-indigo@latest/css/style.css">
    <script>window.lazyScripts=[]</script>

    <!-- custom head -->
    

<meta name="generator" content="Hexo 4.2.0"></head>

<body>
    <div id="loading" class="active"></div>

    <aside id="menu" class="hide" >
  <div class="inner flex-row-vertical">
    <a href="javascript:;" class="header-icon waves-effect waves-circle waves-light" id="menu-off">
        <i class="icon icon-lg icon-close"></i>
    </a>
    <div class="brand-wrap" style="background-image:url(/blog/img/brand.jpg)">
      <div class="brand">
        <a href="/blog/" class="avatar waves-effect waves-circle waves-light">
          <img src="/blog/img/avatar.jpg">
        </a>
        <hgroup class="introduce">
          <h5 class="nickname">特务依昂</h5>
          <a href="mailto:1131564805@qq.com" title="1131564805@qq.com" class="mail">1131564805@qq.com</a>
        </hgroup>
      </div>
    </div>
    <div class="scroll-wrap flex-col">
      <ul class="nav">
        
            <li class="waves-block waves-effect">
              <a href="/blog/"  >
                <i class="icon icon-lg icon-home"></i>
                主页
              </a>
            </li>
        
            <li class="waves-block waves-effect">
              <a href="/blog/archives"  >
                <i class="icon icon-lg icon-archives"></i>
                博客
              </a>
            </li>
        
            <li class="waves-block waves-effect">
              <a href="/blog/tags"  >
                <i class="icon icon-lg icon-tags"></i>
                标签
              </a>
            </li>
        
            <li class="waves-block waves-effect">
              <a href="/blog/categories"  >
                <i class="icon icon-lg icon-th-list"></i>
                分类
              </a>
            </li>
        
            <li class="waves-block waves-effect">
              <a href="https://github.com/tewuyiang" target="_blank" >
                <i class="icon icon-lg icon-github"></i>
                Github
              </a>
            </li>
        
            <li class="waves-block waves-effect">
              <a href="https://weibo.com/u/5516635708/" target="_blank" >
                <i class="icon icon-lg icon-weibo"></i>
                Weibo
              </a>
            </li>
        
            <li class="waves-block waves-effect">
              <a href="https://www.cnblogs.com/tuyang1129/" target="_blank" >
                <i class="icon icon-lg icon-link"></i>
                博客园
              </a>
            </li>
        
      </ul>
    </div>
  </div>
</aside>

    <main id="main">
        <header class="top-header" id="header">
    <div class="flex-row">
        <a href="javascript:;" class="header-icon waves-effect waves-circle waves-light on" id="menu-toggle">
          <i class="icon icon-lg icon-navicon"></i>
        </a>
        <div class="flex-col header-title ellipsis">简单谈谈Spring的IoC以及bean的生命周期</div>
        
        <div class="search-wrap" id="search-wrap">
            <a href="javascript:;" class="header-icon waves-effect waves-circle waves-light" id="back">
                <i class="icon icon-lg icon-chevron-left"></i>
            </a>
            <input type="text" id="key" class="search-input" autocomplete="off" placeholder="输入感兴趣的关键字">
            <a href="javascript:;" class="header-icon waves-effect waves-circle waves-light" id="search">
                <i class="icon icon-lg icon-search"></i>
            </a>
        </div>
        
        
        <a href="javascript:;" class="header-icon waves-effect waves-circle waves-light" id="menuShare">
            <i class="icon icon-lg icon-share-alt"></i>
        </a>
        
    </div>
</header>
<header class="content-header post-header">

    <div class="container fade-scale">
        <h1 class="title">简单谈谈Spring的IoC以及bean的生命周期</h1>
        <h5 class="subtitle">
            
                <time datetime="2020-05-09T15:07:51.000Z" itemprop="datePublished" class="page-time">
  2020-05-09
</time>


	<ul class="article-category-list"><li class="article-category-list-item"><a class="article-category-list-link" href="/blog/categories/Spring/">Spring</a></li></ul>

            
        </h5>
    </div>

    


</header>


<div class="container body-wrap">
    
    <aside class="post-widget">
        <nav class="post-toc-wrap post-toc-shrink" id="post-toc">
            <h4>TOC</h4>
            <ol class="post-toc"><li class="post-toc-item post-toc-level-1"><a class="post-toc-link" href="#一、前言"><span class="post-toc-number">1.</span> <span class="post-toc-text">一、前言</span></a></li><li class="post-toc-item post-toc-level-1"><a class="post-toc-link" href="#二、正文"><span class="post-toc-number">2.</span> <span class="post-toc-text">二、正文</span></a><ol class="post-toc-child"><li class="post-toc-item post-toc-level-2"><a class="post-toc-link" href="#2-1-什么是IoC"><span class="post-toc-number">2.1.</span> <span class="post-toc-text">2.1 什么是IoC</span></a></li><li class="post-toc-item post-toc-level-2"><a class="post-toc-link" href="#2-2-IoC和DI的关系"><span class="post-toc-number">2.2.</span> <span class="post-toc-text">2.2 IoC和DI的关系</span></a></li><li class="post-toc-item post-toc-level-2"><a class="post-toc-link" href="#2-3-Spring如何实现IoC"><span class="post-toc-number">2.3.</span> <span class="post-toc-text">2.3 Spring如何实现IoC</span></a></li><li class="post-toc-item post-toc-level-2"><a class="post-toc-link" href="#2-4-Bean的生命周期"><span class="post-toc-number">2.4.</span> <span class="post-toc-text">2.4 Bean的生命周期</span></a></li></ol></li><li class="post-toc-item post-toc-level-1"><a class="post-toc-link" href="#三、总结"><span class="post-toc-number">3.</span> <span class="post-toc-text">三、总结</span></a></li><li class="post-toc-item post-toc-level-1"><a class="post-toc-link" href="#四、参考"><span class="post-toc-number">4.</span> <span class="post-toc-text">四、参考</span></a></li></ol>
        </nav>
    </aside>


<article id="post-简单谈谈Spring的IOC实现"
  class="post-article article-type-post fade" itemprop="blogPost">

    <div class="post-card">
        <h1 class="post-card-title">简单谈谈Spring的IoC以及bean的生命周期</h1>
        <div class="post-meta">
            <time class="post-time" title="2020-05-09 23:07:51" datetime="2020-05-09T15:07:51.000Z"  itemprop="datePublished">2020-05-09</time>

            
	<ul class="article-category-list"><li class="article-category-list-item"><a class="article-category-list-link" href="/blog/categories/Spring/">Spring</a></li></ul>



            
<span id="busuanzi_container_page_pv" title="文章总阅读量" style='display:none'>
    <i class="icon icon-eye icon-pr"></i><span id="busuanzi_value_page_pv"></span>
</span>


        </div>
        <div class="post-content" id="post-content" itemprop="postContent">
            <h1 id="一、前言"><a href="#一、前言" class="headerlink" title="一、前言"></a>一、前言</h1><p>&emsp;&emsp;这几天正在复习<code>Spring</code>的相关内容，同时想要对<code>Spring</code>的实现原理做一些深入的研究。今天看了看<code>Spring</code>中<code>IoC</code>的实现，找到了一篇非常详细的博客，研究了一个下午，看完之后唯一的感受就是——太复杂了。<code>Spring</code>源码中，类和接口的体系非常的复杂，同时方法的实现也是，方法调用感觉无穷无尽，甚至相互调用，给我绕的晕晕的。应该是自己目前的技术水平还太低，项目经验也不足，甚至对<code>Spring</code>的运用都不够熟悉，所以研究源码对我来说可能还是太早了。</p>
<p>&emsp;&emsp;虽然对于<code>Spring</code>的<code>IoC</code>，我可能连十分之一都还没有弄懂，但是一个下午的研究也不是毫无收获。这篇博客就来简单讲讲我对<code>IoC</code>的理解，以及<code>Spring</code>中，<code>IoC</code>最基本的实现流程。</p>
<br>

<h1 id="二、正文"><a href="#二、正文" class="headerlink" title="二、正文"></a>二、正文</h1><h2 id="2-1-什么是IoC"><a href="#2-1-什么是IoC" class="headerlink" title="2.1 什么是IoC"></a>2.1 什么是IoC</h2><p>&emsp;&emsp;在我们使用传统的编码方式编写代码时，如果在类中需要引用另外一个类的对象，我们一般会直接在类中使用<code>new</code>关键字，创建这样一个对象。此时，使用这个对象的类，就与这个对象所对应的类产生了耦合性。</p>
<p>&emsp;&emsp;<code>IoC</code>中文名称为<strong>控制反转</strong>，它就是用来解决上述问题的一种<strong>设计思想</strong>，它能指导我们设计出耦合性更低，更易于管理的代码。传统的程序，都是在需要使用的地方主动地创建对象，而<code>IoC</code>的思想却是将创建对象的工作交给<code>IoC</code>容器去进行。我们告诉<code>IoC</code>容器，它需要创建那些对象，<code>IoC</code>容器创建好这些对象，然后主动地将它们注入到需要使用的地方。此时，需要使用对象的那些类，并不主动地获取对象，而且由<code>IoC</code>容器为它们分配，控制权在<code>IoC</code>容器手上，这就是控制反转。当然，<code>IoC</code>容器并不只是控制对象，可以理解为<strong>控制外部资源的获取</strong>。</p>
<p>&emsp;&emsp;<code>IoC</code>很好的体现了面向对象设计法则之一—— 好莱坞法则：“别找我们，我们找你”；即由<code>IoC</code>容器帮对象找相应的依赖对象并注入，而不是由对象主动去找。</p>
<br>

<h2 id="2-2-IoC和DI的关系"><a href="#2-2-IoC和DI的关系" class="headerlink" title="2.2 IoC和DI的关系"></a>2.2 IoC和DI的关系</h2><p>&emsp;&emsp;<code>DI</code>中文名称为<strong>依赖注入</strong>，它其实和<code>IoC</code>是相同的概念，或者可以理解为它是<code>IoC</code>的一种具体的实现方式。<code>IoC</code>的概念可能比较模糊，控制反转只是一种思想，可能仅仅只是停留在由其他组件控制对象，而不是在使用的地方直接创建这一层面，但是具体如何实现并没有指明。而<code>DI</code>就是它的一种实现思路，由容器创建对象，并主动将对象注入到需要使用它的地方。<code>2.1</code>中对<code>IoC</code>的解释，实际上更加偏向于<code>DI</code>。</p>
<br>

<h2 id="2-3-Spring如何实现IoC"><a href="#2-3-Spring如何实现IoC" class="headerlink" title="2.3 Spring如何实现IoC"></a>2.3 Spring如何实现IoC</h2><p>&emsp;&emsp;这一块，我就简单地说一说我今天下午在研究<code>Spring</code>的<code>IoC</code>源码的过程中，了解到的一些内容。首先，<code>Spring</code>的<code>IoC</code>容器，可以简单地理解为就是<code>BeanFactory</code>接口的一个实现类对象，比如<code>Spring</code>的应用上下文接口<code>ApplicationContext</code>就是继承自<code>BeanFactory</code>，而我们使用较多的<code>ClassPathXmlApplicationContext</code>就是<code>ApplicationContext</code>的一个实现类。它们都可以理解为是<code>Spring</code>的<code>IoC</code>容器，而<code>BeanFactory</code>就是这个继承体系中的最高层。下面我就以<strong>单例bean</strong>的创建，简单地说一说<code>Spring</code>的<code>IoC</code>实现的一个过程，假设使用到的是<code>ClassPathXmlApplicationContext</code>这个容器，解析的是<code>xml</code>配置文件：</p>
<ol>
<li>容器解析<code>xml</code>配置文件，将声明在<code>xml</code>文件中的<code>bean</code>的配置信息提取出来，每一个<code>bean</code>的配置信息被封装成一个<code>BeanDefinitionHolder</code>对象。<code>BeanDefinitionHolder</code>主要包含三个成员——<code>BeanDefinition</code>对象，<code>bean</code>的名称（<code>id</code>），以及<code>bean</code>的别名。<code>BeanDefinition</code>对象就是用来保存一个<code>bean</code>的配置信息，比如<code>bean</code>的作用域，<code>bean</code>的类型，<code>bean</code>的依赖，<code>bean</code>的属性……</li>
<li>容器创建一个<code>ConcurrentHashMap</code>对象，这个<code>map</code>的<code>key</code>是<code>bean</code>的名称，而<code>value</code>则是<code>BeanDefinition</code>对象的引用。容器将第一步中解析出的每一个<code>BeanDefinitionHolder</code>对象，它对应的<code>bean</code>名称，以及拥有的<code>BeanDefinition</code>引用放入这个<code>map</code>中。所以，这个<code>map</code>保存了我们在程序中声明的所有的<code>bean</code>的配置信息。</li>
<li>容器初始化完成后，开始创建<code>bean</code>，遍历第二步中的<code>map</code>集合，获取到<code>bean</code>的名称以及对应的<code>BeanDefinition</code>对象，通过<code>BeanDefinition</code>对象中的信息，判断这个<code>bean</code>有没有定义为延迟加载，若没有，则需要现在就进行创建。在创建前，先通过<code>BeanDefinition</code>中的配置信息，判断此<code>bean</code>有没有<code>depend-on</code>（依赖）其他<code>bean</code>，若有，则先创建当前<code>bean</code>依赖的<code>bean</code>（此处的<code>depend-on</code>不是<code>bean</code>的属性，而是需要通过配置项进行配置的）。之后，则创建当前遍历到的<code>bean</code>。</li>
<li><code>bean</code>在创建完成后，通过<code>bean</code>的<code>BeanDefinition</code>对象，获取<code>bean</code>需要注入值的属性，然后为属性赋值，若属性的值类型是其他的<code>bean</code>，则以上面相同的步骤，创建属性对应的<code>bean</code>；</li>
<li>容器创建一个<code>ConcurrentHashMap</code>，将创建好的单例<code>bean</code>保存在其中。我们在代码中可以通过容器的<code>getBean</code>方法，传入<code>bean</code>的名称或类型获取单例<code>bean</code>。容器会先去这个<code>map</code>中查找，若<code>map</code>中不存在，且这个<code>bean</code>的配置在第<code>2</code>步中存储配置信息的<code>map</code>中能够找到，则创建这个<code>bean</code>，放入存储<code>bean</code>的<code>map</code>中（因为<code>bean</code>可以配置延迟加载，即第一次获取时加载）；</li>
</ol>
<p>&emsp;&emsp;<code>Spring</code>中，<code>bean</code>最基本的两种作用域就是<code>singleton</code>（单例）和<code>prototype</code>（多例），默认为单例。以上过程是单例<code>bean</code>的创建过程，若作用域为<code>prototype</code>，则每一次调用<code>getBean</code>方法，都会创建一个新的<code>bean</code>。顺带一提，创建<code>bean</code>的方式是通过反射机制，这个大部分人应该都知道。</p>
<br>

<h2 id="2-4-Bean的生命周期"><a href="#2-4-Bean的生命周期" class="headerlink" title="2.4 Bean的生命周期"></a>2.4 Bean的生命周期</h2><p>&emsp;&emsp;上面介绍了一下IoC的实现，而针对每一个单独的Bean，Spring容器如何处理？这就涉及到Bean的生命周期了。这里就来简单介绍一下Bean是生命周期，首先通过一张图了解：</p>
<figure class="image-bubble">
                <div class="img-lightbox">
                    <div class="overlay"></div>
                    <img src="1.png" alt="" title="">
                </div>
                <div class="image-caption"></div>
            </figure>

<p>&emsp;&emsp;上面这张图的描述如下：</p>
<ol>
<li><p>首先由<code>Spring</code>容器创建<code>bean</code>实例；</p>
</li>
<li><p>为<code>bean</code>的属性注入值；</p>
</li>
<li><p>若<code>bean</code>实现了各类<code>Aware</code>接口，则调用相应的<code>set</code>方法，比如说，实现了<code>BeanNameAware</code>接口的<code>bean</code>，此时容器将调用<code>bean</code>的<code>setBeanName</code>方法，将<code>bean</code>的<code>name</code>作为参数；实现了<code>ApplicationContextAware</code>接口的<code>bean</code>，此时容器将执行<code>bean</code>的<code>setApplicationContext</code>方法，将<code>bean</code>所在的上下文对象作为参数……</p>
</li>
<li><p>若容器中包含实现了<code>BeanPostProcessor</code>接口的<code>bean</code>，则此时将调用这些<code>bean</code>的<code>postProcessBeforeInitialization</code>方法，将当前正在创建的<code>bean</code>的引用以及<code>bean</code>的<code>name</code>作为参数传入；</p>
</li>
<li><p>若<code>bean</code>实现了<code>InitializingBean</code>接口，此时将调用<code>bean</code>的<code>afterPropertiesSet</code>方法；</p>
</li>
<li><p>若<code>bean</code>指定了自定义的初始化方法，比如说通过配置文件的<code>init-method</code>选项，则此时将执行这个自定义初始化方法；</p>
</li>
<li><p>若容器中包含实现了<code>BeanPostProcessor</code>接口的<code>bean</code>，则此时将调用这些<code>bean</code>的<code>postProcessAfterInitialization</code>方法，将当前正在创建的<code>bean</code>的引用以及<code>bean</code>的<code>name</code>作为参数传入；</p>
</li>
<li><p>这个时候，<code>bean</code>就算是初始化完毕，可以被使用了，在容器销毁之前，这个对象将一直保存在容器中；</p>
</li>
<li><p>若<code>bean</code>实现了<code>DisposableBean</code>接口，则在容器销毁时，会调用<code>bean</code>的<code>destroy</code>方法；</p>
</li>
<li><p>如果<code>bean</code>定义了自定义的销毁方法，则在容器销毁时，会调用这个自定义的销毁方法；</p>
</li>
<li><p>容器销毁成功，<code>bean</code>也被回收；</p>
</li>
</ol>
<p>&emsp;&emsp;以上步骤中，比较重要的一个部分就是BeanPostProcessor接口的部分，关于这个接口，我专门写了一篇博客，详情请参考：<a href="https://www.cnblogs.com/tuyang1129/p/12866484.html" target="_blank" rel="noopener">谈谈Spring中的BeanPostProcessor接口</a>。</p>
<br>



<h1 id="三、总结"><a href="#三、总结" class="headerlink" title="三、总结"></a>三、总结</h1><p>&emsp;&emsp;以上内容是我根据自己的认识，对<code>Spring</code>的<code>IoC</code>做的一次简单记录，内容并不全面，因为我目前对它的理解也比较浅显。在今天阅读<code>Spring</code>源码的过程中，我发现它真的比我想象中要复杂很多，或许是我水平有限，又或许是没有掌握阅读源码的方法，读起来真的非常吃力。总而言之，想要真正读懂<code>Spring</code>，我还需要很多的学习，希望今后能够尽快提升自己，早日将<code>Spring</code>吃透。</p>
<br>

<h1 id="四、参考"><a href="#四、参考" class="headerlink" title="四、参考"></a>四、参考</h1><ul>
<li><a href="https://www.iteye.com/blog/jinnianshilongnian-1413846" target="_blank" rel="noopener">https://www.iteye.com/blog/jinnianshilongnian-1413846</a></li>
<li><a href="https://javadoop.com/post/spring-ioc#toc_7" target="_blank" rel="noopener">https://javadoop.com/post/spring-ioc#toc_7</a></li>
</ul>

        </div>

        <blockquote class="post-copyright">
    
    <div class="content">
        
<span class="post-time">
    最后更新时间：<time datetime="2020-05-10T17:18:45.771Z" itemprop="dateUpdated">2020-05-11 01:18:45</time>
</span><br>


        
        世界是个球，前方总有路！
        
    </div>
    
    <footer>
        <a href="http://tewuyiang.gitee.io/blog">
            <img src="/blog/img/avatar.jpg" alt="特务依昂">
            特务依昂
        </a>
    </footer>
</blockquote>

        


        <div class="post-footer">
            
	<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/blog/tags/Spring/" rel="tag">Spring</a></li></ul>


            
<div class="page-share-wrap">
    

<div class="page-share" id="pageShare">
    <ul class="reset share-icons">
      <li>
        <a class="weibo share-sns" target="_blank" href="http://service.weibo.com/share/share.php?url=http://tewuyiang.gitee.io/blog/%E7%AE%80%E5%8D%95%E8%B0%88%E8%B0%88Spring%E7%9A%84IOC%E5%AE%9E%E7%8E%B0/&title=《简单谈谈Spring的IoC以及bean的生命周期》 — 博客主页&pic=http://tewuyiang.gitee.io/blog/img/avatar.jpg" data-title="微博">
          <i class="icon icon-weibo"></i>
        </a>
      </li>
      <li>
        <a class="weixin share-sns wxFab" href="javascript:;" data-title="微信">
          <i class="icon icon-weixin"></i>
        </a>
      </li>
      <li>
        <a class="qq share-sns" target="_blank" href="http://connect.qq.com/widget/shareqq/index.html?url=http://tewuyiang.gitee.io/blog/%E7%AE%80%E5%8D%95%E8%B0%88%E8%B0%88Spring%E7%9A%84IOC%E5%AE%9E%E7%8E%B0/&title=《简单谈谈Spring的IoC以及bean的生命周期》 — 博客主页&source=一个未来程序员的博客~~~" data-title=" QQ">
          <i class="icon icon-qq"></i>
        </a>
      </li>
      <li>
        <a class="facebook share-sns" target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=http://tewuyiang.gitee.io/blog/%E7%AE%80%E5%8D%95%E8%B0%88%E8%B0%88Spring%E7%9A%84IOC%E5%AE%9E%E7%8E%B0/" data-title=" Facebook">
          <i class="icon icon-facebook"></i>
        </a>
      </li>
      <li>
        <a class="twitter share-sns" target="_blank" href="https://twitter.com/intent/tweet?text=《简单谈谈Spring的IoC以及bean的生命周期》 — 博客主页&url=http://tewuyiang.gitee.io/blog/%E7%AE%80%E5%8D%95%E8%B0%88%E8%B0%88Spring%E7%9A%84IOC%E5%AE%9E%E7%8E%B0/&via=http://tewuyiang.gitee.io/blog" data-title=" Twitter">
          <i class="icon icon-twitter"></i>
        </a>
      </li>
      <li>
        <a class="google share-sns" target="_blank" href="https://plus.google.com/share?url=http://tewuyiang.gitee.io/blog/%E7%AE%80%E5%8D%95%E8%B0%88%E8%B0%88Spring%E7%9A%84IOC%E5%AE%9E%E7%8E%B0/" data-title=" Google+">
          <i class="icon icon-google-plus"></i>
        </a>
      </li>
    </ul>
 </div>



    <a href="javascript:;" id="shareFab" class="page-share-fab waves-effect waves-circle">
        <i class="icon icon-share-alt icon-lg"></i>
    </a>
</div>



        </div>
    </div>

    
<nav class="post-nav flex-row flex-justify-between">
  
    <div class="waves-block waves-effect prev">
      <a href="/blog/%E8%B0%88%E8%B0%88Spring%E4%B8%AD%E7%9A%84BeanPostProcessor%E6%8E%A5%E5%8F%A3/" id="post-prev" class="post-nav-link">
        <div class="tips"><i class="icon icon-angle-left icon-lg icon-pr"></i> Prev</div>
        <h4 class="title">谈谈Spring中的BeanPostProcessor接口</h4>
      </a>
    </div>
  

  
    <div class="waves-block waves-effect next">
      <a href="/blog/%E9%80%9A%E4%BF%97%E6%98%93%E6%87%82%E7%9A%84%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F%E5%92%8C%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F%E6%97%B6%E9%97%B4%E5%A4%8D%E6%9D%82%E5%BA%A6%E5%88%86%E6%9E%90/" id="post-next" class="post-nav-link">
        <div class="tips">Next <i class="icon icon-angle-right icon-lg icon-pl"></i></div>
        <h4 class="title">快速排序和归并排序的时间复杂度分析——通俗易懂</h4>
      </a>
    </div>
  
</nav>



    




















</article>



</div>

        <footer class="footer">
    <div class="top">
        
<p>
    <span id="busuanzi_container_site_uv" style='display:none'>
        站点总访客数：<span id="busuanzi_value_site_uv"></span>
    </span>
    <span id="busuanzi_container_site_pv" style='display:none'>
        站点总访问量：<span id="busuanzi_value_site_pv"></span>
    </span>
</p>


        <p>
            
                <span><a href="/blog/atom.xml" target="_blank" class="rss" title="rss"><i class="icon icon-lg icon-rss"></i></a></span>
            
            <span>博客内容遵循 <a rel="license noopener" href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh" target="_blank">知识共享 署名 - 非商业性 - 相同方式共享 4.0 国际协议</a></span>
        </p>
    </div>
    <div class="bottom">
        <p><span>特务依昂 &copy; 2015 - 2020</span>
            <span>
                
                Power by <a href="http://hexo.io/" target="_blank">Hexo</a> Theme <a href="https://github.com/yscoder/hexo-theme-indigo" target="_blank">indigo</a>
            </span>
        </p>
    </div>
</footer>

    </main>
    <div class="mask" id="mask"></div>
<a href="javascript:;" id="gotop" class="waves-effect waves-circle waves-light"><span class="icon icon-lg icon-chevron-up"></span></a>



<div class="global-share" id="globalShare">
    <ul class="reset share-icons">
      <li>
        <a class="weibo share-sns" target="_blank" href="http://service.weibo.com/share/share.php?url=http://tewuyiang.gitee.io/blog/%E7%AE%80%E5%8D%95%E8%B0%88%E8%B0%88Spring%E7%9A%84IOC%E5%AE%9E%E7%8E%B0/&title=《简单谈谈Spring的IoC以及bean的生命周期》 — 博客主页&pic=http://tewuyiang.gitee.io/blog/img/avatar.jpg" data-title="微博">
          <i class="icon icon-weibo"></i>
        </a>
      </li>
      <li>
        <a class="weixin share-sns wxFab" href="javascript:;" data-title="微信">
          <i class="icon icon-weixin"></i>
        </a>
      </li>
      <li>
        <a class="qq share-sns" target="_blank" href="http://connect.qq.com/widget/shareqq/index.html?url=http://tewuyiang.gitee.io/blog/%E7%AE%80%E5%8D%95%E8%B0%88%E8%B0%88Spring%E7%9A%84IOC%E5%AE%9E%E7%8E%B0/&title=《简单谈谈Spring的IoC以及bean的生命周期》 — 博客主页&source=一个未来程序员的博客~~~" data-title=" QQ">
          <i class="icon icon-qq"></i>
        </a>
      </li>
      <li>
        <a class="facebook share-sns" target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=http://tewuyiang.gitee.io/blog/%E7%AE%80%E5%8D%95%E8%B0%88%E8%B0%88Spring%E7%9A%84IOC%E5%AE%9E%E7%8E%B0/" data-title=" Facebook">
          <i class="icon icon-facebook"></i>
        </a>
      </li>
      <li>
        <a class="twitter share-sns" target="_blank" href="https://twitter.com/intent/tweet?text=《简单谈谈Spring的IoC以及bean的生命周期》 — 博客主页&url=http://tewuyiang.gitee.io/blog/%E7%AE%80%E5%8D%95%E8%B0%88%E8%B0%88Spring%E7%9A%84IOC%E5%AE%9E%E7%8E%B0/&via=http://tewuyiang.gitee.io/blog" data-title=" Twitter">
          <i class="icon icon-twitter"></i>
        </a>
      </li>
      <li>
        <a class="google share-sns" target="_blank" href="https://plus.google.com/share?url=http://tewuyiang.gitee.io/blog/%E7%AE%80%E5%8D%95%E8%B0%88%E8%B0%88Spring%E7%9A%84IOC%E5%AE%9E%E7%8E%B0/" data-title=" Google+">
          <i class="icon icon-google-plus"></i>
        </a>
      </li>
    </ul>
 </div>


<div class="page-modal wx-share" id="wxShare">
    <a class="close" href="javascript:;"><i class="icon icon-close"></i></a>
    <p>扫一扫，分享到微信</p>
    <img src="" alt="微信分享二维码">
</div>




    <script src="//cdn.bootcss.com/node-waves/0.7.4/waves.min.js"></script>
<script>
var BLOG = { ROOT: '/blog/', SHARE: true, REWARD: false };


</script>

<script src="//unpkg.com/hexo-theme-material-indigo@latest/js/main.min.js"></script>


<div class="search-panel" id="search-panel">
    <ul class="search-result" id="search-result"></ul>
</div>
<template id="search-tpl">
<li class="item">
    <a href="{path}" class="waves-block waves-effect">
        <div class="title ellipsis" title="{title}">{title}</div>
        <div class="flex-row flex-middle">
            <div class="tags ellipsis">
                {tags}
            </div>
            <time class="flex-col time">{date}</time>
        </div>
    </a>
</li>
</template>

<script src="//unpkg.com/hexo-theme-material-indigo@latest/js/search.min.js" async></script>






<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>



<script>
(function() {
    var OriginTitile = document.title, titleTime;
    document.addEventListener('visibilitychange', function() {
        if (document.hidden) {
            document.title = '人呢，怎么不见了！';
            clearTimeout(titleTime);
        } else {
            document.title = '(つェ⊂)咦!欢迎回来!';
            titleTime = setTimeout(function() {
                document.title = OriginTitile;
            },2000);
        }
    });
})();
</script>



</body>
</html>
